package com.cobra.rdd.operator.transform

import org.apache.spark.{SparkConf, SparkContext}

//获取每个分区的最大值
object Spark05_RDD_Operator_Transform_map_partition_index {
  def main(args: Array[String]): Unit = {
    val sparkConf = new SparkConf().setMaster("local[*]").setAppName("mapPartitionsWithIndex")
    val sc = new SparkContext(sparkConf)
    val rdd = sc.makeRDD(List(1, 2, 3, 4))
    //把一个分区的数据全部拿到之后再进行操作
    //mapPartitons: 可以以分区为单位进行数据转换操作
    // 但是会将整个分区的数据加载到内存进行引用
    //如果处理完的数据是不会被释放的，存在对象的引用
    //如果不及时释放会内存溢出
    val mapRDD = rdd.mapPartitionsWithIndex(
      (index, iter) => {
        if(index == 1){
          iter
        }else{
          Nil.iterator
        }
      }
    )
    val mapRDD1 = rdd.mapPartitionsWithIndex(
      (index, iter) => {
        iter.map(
          num => (index,num)
        )
      }
    )
    mapRDD.collect().foreach(println)
    mapRDD1.collect().foreach(println)
    sc.stop()
  }
}
